package ExceptionTest;
/*
运行时异常的原理
 */
public class ExceptionTest2 {
    public static void main(String[] args){
        Object o = new Object();
        o = null;
        /*
        程序执行到下面发生了NullPointerException异常，底层new了一个NullPointerException异常对象
        然后抛出了，由于时main方法调用了o.toString();，所以这个异常NullPointerException抛给了main方法
        main方法没有处理，将这个异常自动抛给了jvm，jvm最终终止程序的执行
         */
        //如果把异常处理了，程序发生异常后，try语句块结束了，跳到catch语句块，执行里面代码，结束之后，下面的语句正常运行
        try{
            o.toString();
        }catch(NullPointerException | ClassCastException nu){  //catch可以写多个，但异常必须从小到大，java8之后，允许采用 | 的写法
            nu.printStackTrace();
        }

        System.out.println("异常处理了");
    }
}
